package com.example.java.zuo.新手班.class01;

/**
 * @Author : 佩萁
 * Description :选择排序
 * @Create : 2023/12/13 - 11:34
 */
public class Code03_SelectionSort {
    //一(1):排序函数
    public static void selectSort(int[] arr) {
        //在进行选择排序之前，先判断边界条件，如果数组为空或者数组长度为2.就不需要我们进行排序
        if (arr == null || arr.length < 2) {
            return;
        }
        //其次我们在进行排序时要考虑怎么排序
        //先进行0~n-1排序 然后找到一个比0位置小的然后进行交换  然后下次排序0位置就不再进行排序了，从1位置开始，也就是1~n-1 以此类推
        //所以我们需要定义一个n也就是数组长度 然后对其进行遍历来找寻需要交换的两个元素
        int N = arr.length;
        //i为最初的最小元素位置，如果后面有比i位置元素小的元素，将会替换掉i位置所在的最小元素
        for (int i = 0; i < N; i++) {
            int minValueIndex = i;
            for (int j = i + 1; j < N; j++) {
                //j为第二个元素的位置，如果它所在位置元素比i位置所在元素小，叫交换二者位置，小于N是因为索引位置不能大于数组的长度
                minValueIndex = arr[j] < arr[minValueIndex] ? j : minValueIndex;
            }
            //最后进行二者的交换
            swap(arr, i, minValueIndex);
        }
    }

    //二:交换函数
    public static void swap(int[] arr, int i, int j) {
        int temp = arr[j];
        arr[j] = arr[i];
        arr[i] = temp;
    }

    //三:打印函数
    public static void printArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    public static void main(String[] args) {
//        int[] arr = {7, 1, 3, 5, 1, 6, 8, 1, 3, 5, 7, 5, 9};
        int[] arr = {2,1};
        //排序前
        printArray(arr);
        System.out.println();
        //选择排序
        selectSort(arr);
        //排序后
        printArray(arr);
    }
}